\section{在\LaTeX 中插入公式和代码}

\subsection{数学公式}

\LaTeX 中提供了行内公式和单独成行的公式。行内公式放在两个\$ 之间。
\\
\begin{tabular}[c]{cc} \\
\begin{minipage}{0.48\textwidth} \small
\begin{verbatim}
一次函数的一般形式为$y=kx+b$，
当$b=0$时，函数图像过原点。
\end{verbatim}
\end{minipage}
&
\begin{minipage}{0.48\textwidth} \small \setlength{\parindent}{2em}
一次函数的一般形式为$y=kx+b$，当$b=0$时，函数图像过原点。
\end{minipage}
\\ \\
\end{tabular}

而单独成行的公式放在\verb|\[|和\verb|\]|之间。
\\
\begin{tabular}[c]{cc} \\
\begin{minipage}{0.48\textwidth} \small
\begin{verbatim}
一般地，我们得到匀加速直线运动中
速度与时间的关系为：
\[
    v=v_0+at
\]
其中$v_0$为初速度，$a$为加速度
\end{verbatim}
\end{minipage}
&
\begin{minipage}{0.48\textwidth} \small \setlength{\parindent}{2em}
一般地，我们得到匀加速直线运动中
速度与时间的关系为：
\[
    v=v_0+at
\]
其中$v_0$为初速度，$a$为加速度
\end{minipage}
\\ \\
\end{tabular}

在公式内可以使用诸如\verb|\alpha|、\verb|\Lambda|等插入$\alpha$、$\Lambda$等希腊字母。

使用\verb|^{上标内容}|插入上标，\verb|_{下标内容}|插入下标，\verb|\frac{分子}{分母}|插入分式，而\verb|\sqrt[n]{x}|插入根式，\verb|\quad|插入间距。例如：
\\
\begin{tabular}[c]{cc} \\
\begin{minipage}{0.48\textwidth} \small
\begin{verbatim}
\[
  x_1=\frac{-b+\sqrt{b^2-4ac}}{2a}
  \quad
  x_2=\frac{-b-\sqrt{b^2-4ac}}{2a}
\]
\end{verbatim}
\end{minipage}
&
\begin{minipage}{0.48\textwidth} \small
\[
  x_1=\frac{-b+\sqrt{b^2-4ac}}{2a} \quad
  x_2=\frac{-b-\sqrt{b^2-4ac}}{2a}
\]
\end{minipage}
\\ \\
\end{tabular}

在公式中，使用\verb|\mathrm{}|输入正体符号。例如微分符号$\mathrm{d}$用\verb|\mathrm{d}|输入。同理，用\verb|\mathbf{}|输入粗体符号。

一些常见的算符都可以这么输入：
\\
\begin{tabular}[c]{cc} \\
\begin{minipage}{0.48\textwidth} \small
\begin{verbatim}
\[
    x \ge 0 \quad
    \ln x \quad
    v=\dot{x} \quad
    \sum_{n=0}^{+\infty}x \quad
    \int_{0}^{x}t\mathrm{d}t \quad
    f''(x)
\]
\end{verbatim}
\end{minipage}
&
\begin{minipage}{0.48\textwidth} \small
\[
    x \ge 0 \quad
    \ln x \quad
    v=\dot{x} \quad
    \sum_{n=0}^{+\infty}x \quad
    \int_{0}^{x}t\mathrm{d}t \quad
    f''(x)
\]
\end{minipage}
\\ \\
\end{tabular}

查看完整的符号表请阅读\textit{lshort}。请注意许多命令不能在公式之外的地方使用。

\subsection{\hologo{AmS}宏包}

\hologo{AmS}宏包提供了公式中一些常用的，但是\LaTeX 并没有直接提供的符号、格式等。

要使用\hologo{AmS}宏包，请在导言区加入
{
\ttfamily
\begin{lstlisting}[frame=single,language=Tex]
\usepackage{amsmath}
\usepackage{amsfonts}
\usepackage{amssymb}
\end{lstlisting}
}

例如表示向量应该使用粗斜体，但是\LaTeX 并没有提供粗斜体命令。这时可以用\hologo{AmS} 宏包提供的\verb|\boldsymbol|命令。例如：
\\
\begin{tabular}[c]{cc} \\
\begin{minipage}{0.48\textwidth} \small
\begin{verbatim}
\[
  \boldsymbol{F}=
  q\boldsymbol{v}\times\boldsymbol{B}
\]
\end{verbatim}
\end{minipage}
&
\begin{minipage}{0.48\textwidth}
\[
  \boldsymbol{F}=q\boldsymbol{v}\times\boldsymbol{B}
\]
\end{minipage}
\\ \\
\end{tabular}

\hologo{AmS}宏包还为插入矩阵、分段函数等提供了方便，例如：
\\
\begin{tabular}[c]{cc} \\
\begin{minipage}{0.48\textwidth} \small
\begin{verbatim}
\[
\begin{pmatrix}
3 & 5 \\
2 & 7
\end{pmatrix}
\]
\end{verbatim}
\end{minipage}
&
\begin{minipage}{0.48\textwidth} \small
\[
\begin{pmatrix}
3 & 5 \\
2 & 7
\end{pmatrix}
\]
\end{minipage}
\\ \\
\end{tabular}
\\
\begin{tabular}[c]{cc} \\
\begin{minipage}{0.48\textwidth}
\begin{verbatim}
\[
\begin{cases}
0 & t<0, \\
1 & t>0.
\end{cases}
\]
\end{verbatim}
\end{minipage}
&
\begin{minipage}{0.48\textwidth}
\[
\begin{cases}
0 & t<0, \\
1 & t>0.
\end{cases}
\]
\end{minipage}
\\ \\
\end{tabular}
其中\verb|&|表示分隔同一行内的两个元素，而\verb|\\|表示换行。\texttt{pmatrix}表示圆括号包裹的矩阵，而要想输入方括号包裹的矩阵，需要使用\texttt{bmatrix}。

\subsection{简单的代码块}

使用\verb'\verb|代码内容|'可以在行内插入一小段单行的代码，例如你可以用\verb'\verb|B = inv(A)|'插入\verb|B = inv(A)|。代码的两边用两个竖线包裹只是约定俗成的习惯，而不是必须采用的规范，你也可以把两个竖线换成其他两个相同的字符，尤其是你插入的代码中含有竖线时你就必须这么做，例如你可以用\verb'\verb"[ -e .bashrc ] || touch ~\.bashrc"'插入代码\\\verb"[ -e .bashrc ] || touch ~\.bashrc"。

使用\texttt{verbatim}环境可以插入多行的代码块。``verbatim''这个单词的本意就是按照原样，一字不差。例如：
\\
\begin{tabular}[c]{cc} \\
\begin{minipage}{0.48\textwidth} \small \ttfamily
\begin{lstlisting}
\begin{verbatim}
    A = [1,2;3,4]
    B = inv(A)
    if (isequal(A*B,eye(2)))
        disp("That's OK.")
    else
        disp("Something weird!")
    endif
\end{verbatim}
\end{lstlisting}
\end{minipage}
&
\begin{minipage}{0.48\textwidth} \small
\begin{verbatim}
    A = [1,2;3,4]
    B = inv(A)
    if (isequal(A*B,eye(2)))
        disp("That's OK.")
    else
        disp("Something weird!")
    endif
\end{verbatim}
\end{minipage}
\\ \\
\end{tabular}

\subsection{lstlisting环境}

\texttt{verbatim}环境创建的代码块终究还是简陋了一些，你可能希望代码块有个边框、行号什么的。这时候就需要用\texttt{lstlisting}环境。这个环境由\textit{listings}宏包提供。

在\texttt{lstlisting}环境的可选参数中，你可以指定行号位置、边框样式等。行号位置可以选择左或者右，边框样式有\texttt{single}、\texttt{box}、\texttt{shadowbox}等。
\begin{verbatim}
\begin{lstlisting}[frame=single,numbers=left]
A = [1,2;3,4]
B = inv(A)
if (isequal(A*B,eye(2)))
    disp("That's OK.")
else
    disp("Something weird!")
endif
\end{lstlisting}
\end{verbatim}
\begin{lstlisting}[frame=single,numbers=left]
A = [1,2;3,4]
B = inv(A)
if (isequal(A*B,eye(2)))
    disp("That's OK.")
else
    disp("Something weird!")
endif
\end{lstlisting}

如果指定使用的编程语言，甚至还会有简单的语法高亮：
\begin{verbatim}
\begin{lstlisting}[frame=single,numbers=left,language=Matlab]
...
\end{lstlisting}
\end{verbatim}
\begin{lstlisting}[frame=single,numbers=left,language=Matlab]
A = [1,2;3,4]
B = inv(A)
if (isequal(A*B,eye(2)))
    disp("That's OK.")
else
    disp("Something weird!")
endif
\end{lstlisting}

不过\texttt{lstinline}环境默认用的不是等宽字体。如果你是认为代码必须用等宽字体的资深程序猿，可以采取这样一个workaround：
\begin{verbatim}
{
\ttfamily
\begin{lstlisting}[frame=single,numbers=left,language=Matlab]
...
\end{lstlisting}
}
\end{verbatim}
{
\ttfamily
\begin{lstlisting}[frame=single,numbers=left,language=Matlab]
A = [1,2;3,4]
B = inv(A)
if (isequal(A*B,eye(2)))
    disp("That's OK.")
else
    disp("Something weird!")
endif
\end{lstlisting}
}

舒服多了。
